package com.yyxk.thousandtime.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
import android.support.annotation.RequiresApi;

/**
 * Created by LX on 2017/2/6.
 */
/* ----------BigGod be here!----------/
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑
 * 　　　　┃　　　┃代码无BUG！
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━神兽出没━━━━━━
 * 项目名称:RenderScriptTest
 * 包名:com.yyxk.renderscripttest
 * 类描述:Blur类，封装RenderScript
 * 创建人:LX
 * 创建时间:2017/2/6
 * 修改人:LX
 * 修改时间:
 * 修改备注
 */
public class BlurBitmap {
    private static  float BITMAP_SCALE=1.0f;//放大
    private static  float BLUR_RADIUS=25;//半径

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    public static Bitmap blur(Context context, Bitmap image){
        int width = Math.round(image.getWidth()*BITMAP_SCALE);
        int height= Math.round(image.getHeight()*BITMAP_SCALE);
        Bitmap inputBitmap=Bitmap.createScaledBitmap(image,width,height,false);
        Bitmap outputBitmap=Bitmap.createBitmap(inputBitmap);
        RenderScript rs=RenderScript.create(context);
        ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        Allocation tmpIn=Allocation.createFromBitmap(rs,inputBitmap);
        Allocation tmpOut=Allocation.createFromBitmap(rs,outputBitmap);
        theIntrinsic.setRadius(BLUR_RADIUS);
        theIntrinsic.setInput(tmpIn);
        theIntrinsic.forEach(tmpOut);
        tmpOut.copyTo(outputBitmap);
        return outputBitmap;
    }

    /**
     * 设置放大倍数
     * @param scale
     */
    public static void setBitmapScale(float scale){
        BITMAP_SCALE=scale;
    }

    /**
     * 设置模糊半径
     * @param blurRadius
     */
    public static void setBlurRadius(float blurRadius) {
        BLUR_RADIUS = blurRadius;
    }
}
